#ifndef PARSE_H_
#define PARSE_H_
#ifndef TOKEN_H_
#   include "token.h"
#endif

void Parse(unique_ref<TTokens> Tokens);

#if 0
class   TParser
    {
public:
    TParser(unique_ptr<TTokens> Tokens_) : Tokens(std::move(Tokens_)) {};
   ~TParser();
private:
    unique_ptr<TTokens> Tokens;
    };


class   TGrammar
    {
public:
TGrammar(unique_ref<TToken> Tokens_) : Tokens(Tokens_), TokenVector(*Tokens_) {};
    void    ParseTokens();
private:
    TGrammar& operator=(TGrammar&Other)=delete;
    const vector<TToken>&   TokenVector;
    int                 GetNextToken();
    int                 TokenId = 0;
    int                 MaxTokenId;
    TToken              Token;
    unique_ref<TToken>  Tokens;
    };

void    ParseInput();
void    SyntaxError(int ErrorCode, TToken Token, const char* Format, ...);
#endif
#endif  /* PARSE_H_ */
